// 作为项目入口文件

const express = require('express')
const app = express()

// 为优化res.send()代码
// 因为在处理函数中,需要多次调用res.send(),向客户端响应处理失败的结果，为了简化代码，可以手动封装一个res.cc函数
// 在所有路由之前，声明一个全局中间件，为res对象挂载一个res.cc函数
app.use(function(req, res, next) {
    // status = 0 为成功，status =1为失败，默认将status的值设施为1，方便处理失败的情况
    res.cc = function(err, status = 1) {
        res.send({
            // 状态
            status,
            // 状态描述 ，判断err是错误对象，还是字符串
            message: err instanceof Error ? err.message : err
        })
    }
    next()
})

//cors 配置跨域 中间件
const cors = require('cors')
app.use(cors())

// 配置解析表单数据 中间件 (必须放在路由之前)
app.use(express.urlencoded({ extended: false }))

// 定义全局错误级别中间件，捕获验证失败的错误，并把验证失败的结果响应给客户端
const joi = require('joi')
    // 错误中间件
app.use(function(err, req, res, next) {
    // 数据验证失败
    if (err instanceof joi.ValidationError) return res.cc(err)
        // 未知错误
    res.cc(err)
})


//导入注册用户模块
const userRouter = require('./router/user.js')
app.use('/api', userRouter)

app.listen(4008, function() {
    console.log('api server running at http://127.0.0.1:4008');
})